package sparkml_study

import org.apache.spark.sql.SparkSession
import org.apache.spark.ml.feature.{ChiSqSelector, ChiSqSelectorModel}
import org.apache.spark.ml.linalg.Vectors
object TeZhengXuanZe {
  def main(args: Array[String]): Unit = {
    val spark=SparkSession.builder()
      .master("local[*]")
      .appName("特征选择")
      .getOrCreate()


    //  这里演示的是卡方选择
    //  创建实验数据,这是一个具有3个样本，4个特征维度的数据集，标签有1和0两种
    val df=spark.createDataFrame(Seq(
      (1,Vectors.dense(0.0,0.0,18.0,1.0),1),
      (2,Vectors.dense(0.0,1.0,12.0,0.0),0),
      (3,Vectors.dense(1.0,0.0,15.0,0.1),0)
    )).toDF("id","features","label")

    //  然后使用卡方选择进行特征选择器的训练，为了方便观察，我们设置只选择和标签关联性最强的一个特征(可以通过)
    //  setNumTopFeatures()方法进行设置
    val selector=new ChiSqSelector()
      .setNumTopFeatures(1)
      .setFeaturesCol("features")
      .setLabelCol("label")
      .setOutputCol("selected-feature")

    //  使用训练出的模型对元数据进行处理,可以看见，第3列特征被选出作为最有用的特征列
    val result=selector.fit(df).transform(df)






    spark.close()
  }

}
